package other;

/**题目：汉明距离
 * 就是求两个数二进制位不同的个数
 * y: 0 0 1 1   3
 *    1 0 0 0   8
 *    汉明距离就是3
 * @Author Gavin
 * @date 2022.01.03 10:43
 */
public class solution_2 {
    /**
     * 解题思路：
     * 将两个数进行异或操作（异或就是不相同的为1，相同的为0），然后计算二进制1的个数
     *       0 0 1 1   3
     *       1 0 0 0   8
     * 异或：1 0 1 1
     *
     */
    public static int solution(int x,int y){
        return numOfOne(x^y);
    }


//计算一个数中二进制1的个数
    private static int numOfOne(int n){
        int count=0;
        while (n!=0){
            count++;
            n&=(n-1);//主要思想就是把相应位上的1和0进行与运算变为0，最后都为0就是终止条件
        }
        return count;
    }

    public static void main(String[] args) {
        System.out.println(solution(3, 8));
        System.out.println(2&(2-1));
    }
}
